#pragma once

using namespace System::Drawing;

namespace BulletSharp
{
	public interface class IDebugDraw
	{
		virtual void Draw3dText(Vector3% location, String^ textString);
		virtual void DrawAabb(Vector3% from, Vector3% to, BtColor color);
		virtual void DrawArc(Vector3% center, Vector3% normal, Vector3% axis, btScalar radiusA, btScalar radiusB,
			btScalar minAngle, btScalar maxAngle, BtColor color, bool drawSect, btScalar stepDegrees);
		virtual void DrawArc(Vector3% center, Vector3% normal, Vector3% axis, btScalar radiusA, btScalar radiusB,
			btScalar minAngle, btScalar maxAngle, BtColor color, bool drawSect);
		virtual void DrawBox(Vector3% bbMin, Vector3% bbMax, Matrix% trans, BtColor color);
		virtual void DrawBox(Vector3% bbMin, Vector3% bbMax, BtColor color);
		virtual void DrawCapsule(btScalar radius, btScalar halfHeight, int upAxis, Matrix% transform, BtColor color);
		virtual void DrawCone(btScalar radius, btScalar height, int upAxis, Matrix% transform, BtColor color);
		virtual void DrawContactPoint(Vector3% pointOnB, Vector3% normalOnB, btScalar distance, int lifeTime, BtColor color);
		virtual void DrawCylinder(btScalar radius, btScalar halfHeight, int upAxis, Matrix% transform, BtColor color);
		virtual void DrawLine(Vector3% from, Vector3% to, BtColor color);
		virtual void DrawLine(Vector3% from, Vector3% to, BtColor fromColor, BtColor toColor);
		virtual void DrawPlane(Vector3% planeNormal, btScalar planeConst, Matrix% transform, BtColor color);
		virtual void DrawSphere(Vector3% p, btScalar radius, BtColor color);
		virtual void DrawSphere(btScalar radius, Matrix% transform, BtColor color);
		virtual void DrawSpherePatch(Vector3% center, Vector3% up, Vector3% axis, btScalar radius, btScalar minTh, btScalar maxTh,
			btScalar minPs, btScalar maxPs, BtColor color, btScalar stepDegrees, bool drawSphere);
		virtual void DrawSpherePatch(Vector3% center, Vector3% up, Vector3% axis, btScalar radius, btScalar minTh, btScalar maxTh,
			btScalar minPs, btScalar maxPs, BtColor color, btScalar stepDegrees);
		virtual void DrawSpherePatch(Vector3% center, Vector3% up, Vector3% axis, btScalar radius, btScalar minTh, btScalar maxTh,
			btScalar minPs, btScalar maxPs, BtColor color);
		virtual void DrawTransform(Matrix% transform, btScalar orthoLen);
		virtual void DrawTriangle(Vector3% v0, Vector3% v1, Vector3% v2, BtColor color, btScalar);
		virtual void DrawTriangle(Vector3% v0, Vector3% v1, Vector3% v2, Vector3%, Vector3%, Vector3%, BtColor color, btScalar alpha);

		virtual void ReportErrorWarning(String^ warningString);

		property DebugDrawModes DebugMode
		{
			virtual DebugDrawModes get();
			virtual void set(DebugDrawModes value);
		}
	};
};
